--- /dev/null
+#!/bin/bash
+
+ME=$(basename $0)
+
+if [ $# -lt 1 ] || [ $# -gt 2 ] ; then
+ echo "usage: $ME <repository-name> [search-path]" 1>&2
+ exit 1;
+fi
+
+REPO=$1
+LINUX_SRC_PATH=$2
+
+if [ X"${LINUX_SRC_PATH}" != X ] ; then
+ echo "$ME: Searching \`${LINUX_SRC_PATH}' for $REPO" 1>&2
+ IFS_saved="$IFS"
+ IFS=:
+ for i in $LINUX_SRC_PATH ; do
+ # Ignore current directory since we will almost certainly find
+ # the target directory there which breaks updating (there's no
+ # point updating from yourself!).
+ if [ X"." = X"${i}" ] ; then
+ echo "$ME: Ignoring \`.'" 1>&2
+ continue
+ fi
+
+ if [ -d "$i/$REPO/.hg" ] ; then
+ echo "$ME: Found $i/$REPO" 1>&2
+ echo "$i/$REPO"
+ exit 0
+ fi
+ done
+ IFS="$IFS_saved"
+fi
+
+XEN=$(hg -R ${XEN_ROOT} path default)
+if [ $? -ne 0 ] || [ X"$XEN" = "X" ] ; then
+ echo "$ME: Unable to determine Xen repository parent." 1>&2
+ exit 1;
+fi
+
+BASE=$(dirname ${XEN})
+if [ $? -ne 0 ] || [ X"$XEN" = "X" ] ; then
+ echo "$ME: Unable to determine Xen repository parent." 1>&2
+ exit 1;
+fi
+
+echo "$ME: Found ${BASE}/${REPO}" 1>&2
+echo ${BASE}/${REPO}
+exit 0
-# Main repository to clone.
-XEN_LINUX_HGREPO ?= http://xenbits.xensource.com/linux-$(LINUX_VER)-xen.hg
+# Mercurial
+HG ?= hg
-# Set this to pull additional changesets from a second source.
+LINUX_SRCDIR ?= linux-$(LINUX_VER)-xen.hg
-# This can be useful if you use a local mirror for XEN_LINUX_HGREPO
-# (to reduce time spent cloning) but still want to pull the very
-# latest changesets from xenbits.
-XEN_LINUX_HGUPDATES ?=
+# Repository to clone.
+XEN_LINUX_HGREPO ?= $$(sh buildconfigs/select-repository $(LINUX_SRCDIR) $(LINUX_SRC_PATH))
-# Set this to update to a particlar revision.
-XEN_LINUX_HGREV ?=
+# The source directory is not automatically updated to avoid blowing
+# away developer's changes. If you want to automatically pull a new
+# version of the Linux tree then add `XEN_LINUX_UPDATE=y' to your make
+# command line.
+ifeq ($(XEN_LINUX_UPDATE),y)
+__XEN_LINUX_UPDATE = $(LINUX_SRCDIR)/.force-update
+else
+__XEN_LINUX_UPDATE =
+endif
-LINUX_SRCDIR ?= linux-$(LINUX_VER)-xen.hg
+# Set XEN_LINUX_HGREV to update to a particlar revision.
+XEN_LINUX_HGREV ?= tip
-$(LINUX_SRCDIR)/.valid-src:
+$(LINUX_SRCDIR)/.valid-src: $(__XEN_LINUX_UPDATE)
+ set -e ; __repo=$(XEN_LINUX_HGREPO) ; \
if [ ! -d $(LINUX_SRCDIR) ] ; then \
- hg clone $(XEN_LINUX_HGREPO) $(LINUX_SRCDIR) ; \
- fi
- if [ -n "$(XEN_LINUX_HGUPDATES)" ] ; then \
- hg pull -R $(LINUX_SRCDIR) $(XEN_LINUX_HGUPDATES) ; \
+ echo "Cloning $${__repo} to $(LINUX_SRCDIR)." ; \
+ $(HG) clone $${__repo} $(LINUX_SRCDIR) ; \
+ else \
+ echo "Pulling changes from $${__repo} into $(LINUX_SRCDIR)." ; \
+ $(HG) -R $(LINUX_SRCDIR) pull $${__repo} ; \
fi
if [ -n "$(XEN_LINUX_HGREV)" ] ; then \
- hg update -R $(LINUX_SRCDIR) $(XEN_LINUX_HGREV) ; \
+ echo "Updating $(LINUX_SRCDIR) to revision $(XEN_LINUX_HGREV)." ; \
+ $(HG) update -R $(LINUX_SRCDIR) $(XEN_LINUX_HGREV) ; \
fi
touch $@
+
+.PHONY: $(LINUX_SRCDIR)/.force-update
+$(LINUX_SRCDIR)/.force-update:
+ @ :